/**
 * CarModel.java
 * create by Lisq
 * date 2014-3-10
 */
package com.lsq.jian_zao_zhe_mo_shi.model;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Lisq
 */
public abstract class CarModel {
	// 这个参数是各个基本方法执行的顺序
	private List<String> sequence = new ArrayList<String>();
	
	/*
	 * 首先，这个模型要能够被发动起来，
	 * 别管是手摇发动，还是电力发动，
	 * 反正 是要能够发动起来，
	 * 那这个实现要在实现类里了
	 */
	protected abstract void start();

	// 能发动，那还要能停下来，那才是真本事
	protected abstract void stop();

	// 喇叭会出声音，是滴滴叫，还是哔哔
	protected abstract void alarm();

	// 引擎会轰隆隆的响，不响那是假的
	protected abstract void engineBoom();

	final public void run() {
		// 循环一遍，谁在前，就先执行谁
		for (int i = 0; i < this.sequence.size(); i++) {
			String actionName = this.sequence.get(i);
			if (actionName.equalsIgnoreCase("start")) { // 如果是start关键字，
				this.start(); // 开启汽车
			} else if (actionName.equalsIgnoreCase("stop")) { // 如果是stop关键字
				this.stop(); // 停止汽车
			} else if (actionName.equalsIgnoreCase("alarm")) { // 如果是alarm关键字
				this.alarm(); // 喇叭开始叫了
			} else if (actionName.equalsIgnoreCase("engine boom")) { // 如果是engineboom关键字
				this.engineBoom(); // 引擎开始轰鸣
			}
		}
	}

	// 把传递过来的值传递到类内
	final public void setSequence(List<String> sequence) {
		this.sequence = sequence;
	}
}
